package com.xxx.controller;

import com.xxx.bean.Order;
import com.xxx.service.RuleEngineService;
import org.kie.api.KieBase;
import org.kie.api.runtime.KieSession;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * 测试Drools规则引擎
 */
@RestController
public class TestController {

    @Resource
    private KieBase kieBase;

    // 动态规则（可以替换上面的kieBase）
    @Resource
    private RuleEngineService ruleEngineService;

    /**
     * 快速入门（静态规则）
     */
    @RequestMapping("/test")
    public String test(int amount){
        Order order = new Order();
        order.setAmount(amount);
        // 创建会话对象，用于和规则交互的引擎
        KieSession kieSession = kieBase.newKieSession();
        // 将数据交给规则引擎，规则迎请会根据提供的数据进行规则匹配
        kieSession.insert(order);
        // 激活规则引擎，如果匹配成功则执行
        kieSession.fireAllRules();
        // 关闭会话
        kieSession.dispose();
        return "订单金额：" + order.getAmount() + "，订单积分：" + order.getScore();
    }

    /**
     * 重新加载动态规则
     */
    @RequestMapping("reload")
    public String reload() {
        ruleEngineService.reload();
        return "success";
    }

    /**
     * 测试动态规则
     */
    @RequestMapping("/testReload")
    public String testReload(int amount){
        Order order = new Order();
        order.setAmount(amount);
        // 创建会话对象，用于和规则交互的引擎
        KieSession kieSession = ruleEngineService.getKieContainer().newKieSession();
        // 将数据交给规则引擎，规则迎请会根据提供的数据进行规则匹配
        kieSession.insert(order);
        // 激活规则引擎，如果匹配成功则执行
        kieSession.fireAllRules();
        // 关闭会话
        kieSession.dispose();
        return "订单金额：" + order.getAmount() + "，订单积分：" + order.getScore();
    }

}
